package client

import (
	"context"
	"log"
	"smallnest-rpcx/services"

	"github.com/smallnest/rpcx/client"
)

//同步客户端
func StartSyncXClient() {
	// #1 定义了服务发现,这里实现了最简单的服务发现 Peer2PeerDiscovery
	d := client.NewPeer2PeerDiscovery("tcp@127.0.0.1:8972", "")
	// #2
	xclient := client.NewXClient("Arith",
		client.Failtry,      //failmode指示客户端如何处理呼叫失败：重试，快速返回或重试另一台服务器？
		client.RandomSelect, //如果一个服务有多个服务器，则selectmode指示客户端如何选择服务器。
		d,
		client.DefaultOption,
	)
	defer xclient.Close()

	// #3 定义请求
	args := &services.Args{
		A: 10,
		B: 20,
	}

	// #4 定义想要
	reply := &services.Reply{}

	// #5 调用方法 (同步)
	err := xclient.Call(context.Background(), "Mul", args, reply)
	if err != nil {
		log.Fatalf("failed to call: %v", err)
	}

	log.Printf("%d * %d = %d", args.A, args.B, reply.C)
}
